#include "BulletCollision/CollisionDispatch/btGhostObject.h"
#ifdef __cplusplus
extern "C" {
#endif
btPairCachingGhostObject* bullet_NewbtPairCachingGhostObject(){
	btPairCachingGhostObject* wrap_out = new btPairCachingGhostObject();
	return wrap_out;
}

btHashedOverlappingPairCache* bullet_btPairCachingGhostObject_getOverlappingPairCache(btPairCachingGhostObject* c_this){
	btHashedOverlappingPairCache * c_out = c_this->getOverlappingPairCache();
	btHashedOverlappingPairCache* wrap_out = (btHashedOverlappingPairCache*)(void*)(c_out);
	return wrap_out;
}

btGhostPairCallback* bullet_NewbtGhostPairCallback(){
	btGhostPairCallback* wrap_out = new btGhostPairCallback();
	return wrap_out;
}

btGhostObject* bullet_NewbtGhostObject(){
	btGhostObject* wrap_out = new btGhostObject();
	return wrap_out;
}

void bullet_btGhostObject_convexSweepTest(btGhostObject* c_this,btConvexShape* castShape,btTransform* convexFromWorld,btTransform* convexToWorld,btCollisionWorld::ConvexResultCallback* resultCallback,double allowedCcdPenetration){
	btConvexShape const * c_arg_castShape=(btConvexShape const *)(void*)(castShape);
	btTransform const& c_arg_convexFromWorld=(btTransform const&)(*convexFromWorld);
	btTransform const& c_arg_convexToWorld=(btTransform const&)(*convexToWorld);
	btCollisionWorld::ConvexResultCallback& c_arg_resultCallback=(btCollisionWorld::ConvexResultCallback&)(*resultCallback);
	btScalar c_arg_allowedCcdPenetration=allowedCcdPenetration;
	c_this->convexSweepTest(c_arg_castShape,c_arg_convexFromWorld,c_arg_convexToWorld,c_arg_resultCallback,c_arg_allowedCcdPenetration);
}

int bullet_btGhostObject_getNumOverlappingObjects(btGhostObject* c_this){
	int c_out = c_this->getNumOverlappingObjects();
	int wrap_out = (c_out);
	return wrap_out;
}

btCollisionObject* bullet_btGhostObject_getOverlappingObject(btGhostObject* c_this,int index){
	int c_arg_index=index;
	btCollisionObject * c_out = c_this->getOverlappingObject(c_arg_index);
	btCollisionObject* wrap_out = (btCollisionObject*)(void*)(c_out);
	return wrap_out;
}

btCollisionObject* bullet_btGhostObject_getOverlappingObject1(btGhostObject* c_this,int index){
	int c_arg_index=index;
	btCollisionObject const * c_out = c_this->getOverlappingObject(c_arg_index);
	btCollisionObject* wrap_out = (btCollisionObject*)(void*)(c_out);
	return wrap_out;
}

void bullet_btGhostObject_rayTest(btGhostObject* c_this,btVector3* rayFromWorld,btVector3* rayToWorld,btCollisionWorld::RayResultCallback* resultCallback){
	btVector3 const& c_arg_rayFromWorld=(btVector3 const&)(*rayFromWorld);
	btVector3 const& c_arg_rayToWorld=(btVector3 const&)(*rayToWorld);
	btCollisionWorld::RayResultCallback& c_arg_resultCallback=(btCollisionWorld::RayResultCallback&)(*resultCallback);
	c_this->rayTest(c_arg_rayFromWorld,c_arg_rayToWorld,c_arg_resultCallback);
}

btGhostObject* bullet_btGhostObject_upcast(btGhostObject* c_this,btCollisionObject* colObj){
	btCollisionObject const * c_arg_colObj=(btCollisionObject const *)(void*)(colObj);
	btGhostObject const * c_out = c_this->upcast(c_arg_colObj);
	btGhostObject* wrap_out = (btGhostObject*)(void*)(c_out);
	return wrap_out;
}

btGhostObject* bullet_btGhostObject_upcast1(btGhostObject* c_this,btCollisionObject* colObj){
	btCollisionObject * c_arg_colObj=(btCollisionObject *)(void*)(colObj);
	btGhostObject * c_out = c_this->upcast(c_arg_colObj);
	btGhostObject* wrap_out = (btGhostObject*)(void*)(c_out);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
